//
//  XBHufmanTree.c
//  数据结构算法和笔试题
//
//  Created by 王国栋 on 16/6/22.
//  Copyright © 2016年 xiaobai. All rights reserved.
//

#include "XBHufmanTree.h"
#include <stdlib.h>

// -- 哈夫曼树,从树中一个节点到另一个节点之间的分支构成的两个节点之间的距离成为-------->路径

//带权值的节点，节点的路径等于从该节点到树根节点的路径长度和节点权值乘积。

//-- 哈夫曼树权值路径长度最小的二叉树


//-- 创建哈弗曼树
//1.先把有权值的节点作为一个新的节点按从小到大的顺序排成一个有序序列。
//2.取最小的两个节点，作为一个新节点的子节点，小的在左边，大的在右边。新二叉树的节点的权值为左右子树上根节点的权值之和
//3.在有序序列中删除刚刚加入的树，并把刚刚组成的新的二叉树加入有序序列。
//4.重复2，3，直到集合只剩下一棵树为止

typedef struct XBHufmanNode
{
    float w;//权值
    char data;//数据
    struct XBHufmanNode * l_Child;
    struct XBHufmanNode * r_Child;
}XBHufmanNode;
XBHufmanNode nodes[6];//原来的节点的

//创建有权值的节点
void createHufmanNode()
{
    
    int wArr[] = {5,15,40,30,10};
    for (int i = 0; i<6; i++) {
        
        XBHufmanNode * tNode = (XBHufmanNode*)malloc(sizeof(XBHufmanNode));
        tNode->data = 'A'+i;
        tNode->w = wArr[i];
    }
}

XBHufmanNode * createHufmanTree()
{
    XBHufmanNode * root ;
   // qsort(nodes, <#size_t#>, <#size_t#>, <#int (*)(const void *, const void *)#>)
    return root;
}
//void show_tree(Node *t)
//{
//    if(t!=NULL)
//    {
//        printf("%c",t->val.data);
//        if(t->l!=NULL)
//        {
//            printf("(");
//            show_tree(t->l);
//            printf(",");
//            show_tree(t->r);
//            printf(")");
//        }
//    }
//}
